@namespace Oqtane.Themes.Controls
@using System.Net
@inherits ThemeControlBase
@inject ISettingService SettingService
@inject IStringLocalizer<UserProfile> Localizer
@inject NavigationManager NavigationManager

@if (PageState.User != null)
{
    <a href="@_profileurl" class="@CssClass app-profile">@PageState.User.Username</a>
}
else
{
    @if (ShowRegister && PageState.Site.AllowRegistration)
    {
        <a href="@_registerurl" class="@CssClass app-profile">@Localizer["Register"]</a>
    }
}

@code {

    [Parameter]
    public bool ShowRegister { get; set; }

    [Parameter]
    public string CssClass { get; set; } = "btn btn-primary";

    [Parameter]
    public string RegisterUrl { get; set; } // optional parameter to specify a custom registration url

    [Parameter]
    public string ProfileUrl { get; set; } // optional parameter to specify a custom user profile url

    private string _registerurl = "";
    private string _profileurl = "";
    private string _returnurl = "";

    protected override void OnParametersSet()
    {        
        if (!PageState.QueryString.ContainsKey("returnurl"))
        {
            // remember current url
            _returnurl = WebUtility.UrlEncode(PageState.Route.PathAndQuery);
        }
        else
        {
            // use existing value
            _returnurl = PageState.QueryString["returnurl"];
        }

        if (!string.IsNullOrEmpty(RegisterUrl))
        {
            _registerurl = RegisterUrl;            
            _registerurl += (!_registerurl.Contains("?") ? "?" : "&") + "returnurl=" + (_registerurl.Contains("://") ? WebUtility.UrlEncode(PageState.Route.RootUrl) + _returnurl : _returnurl);
        }
        else
        {
            if (!string.IsNullOrEmpty(SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:RegisterUrl", "")))
            {
                _registerurl = SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:RegisterUrl", "");
                _registerurl += (!_registerurl.Contains("?") ? "?" : "&") + "returnurl=" + (_registerurl.Contains("://") ? WebUtility.UrlEncode(PageState.Route.RootUrl) + _returnurl : _returnurl);
            }
            else
            {
                _registerurl = NavigateUrl("register", "returnurl=" + _returnurl);
            }
        }

        if (!string.IsNullOrEmpty(ProfileUrl))
        {
            _profileurl = ProfileUrl;
            _profileurl += (!_profileurl.Contains("?") ? "?" : "&") + "returnurl=" + (_profileurl.Contains("://") ? WebUtility.UrlEncode(PageState.Route.RootUrl) + _returnurl : _returnurl);
        }
        else
        {
            if (!string.IsNullOrEmpty(SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:ProfileUrl", "")))
            {
                _profileurl = SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:ProfileUrl", "");
                _profileurl += (!_profileurl.Contains("?") ? "?" : "&") + "returnurl=" + (_profileurl.Contains("://") ? WebUtility.UrlEncode(PageState.Route.RootUrl) + _returnurl : _returnurl);
            }
            else
            {
                _profileurl = NavigateUrl("profile", "returnurl=" + _returnurl);
            }
        }
    }
}


